SET QUOTED_IDENTIFIER OFF
GO
SET ANSI_NULLS ON
GO
CREATE PROC [dbo].[SP_TXMVTO_CNTB_I49] 
/*-------------------------------------------------------------------*/    
/*----- Empresa           : OFISIS S.A.                          ----*/    
/*----- Cliente           : OFISIS S.A.                          ----*/    
/*----- Sistema           : Contabilidad                         ----*/    
/*----- Modulo            : Empresa                              ----*/    
/*----- Programa          : Ajuste por redondeo Para Todas las Unidades----*/    
/*----- Nombre            : SP_TXMVTO_CNTB_I49                   ----*/    
/*----- Script            : TXMVTO_CNTB                          ----*/    
/*----- Desarrollado por  : LMGP				                 ----*/    
/*----- Fecha             : 03/07/2006                           ----*/    
/*----- Base de Datos     : MS SQL Server                        ----*/    
/*----- Version BD        : 2005                                  ----*/    
/*-------------------------------------------------------------------*/    
/*---------------------------------------------------------------------*/          
/*----- Modificado 1 por :					                      -----*/          
/*----- Fecha Modifica   :			                              -----*/          
/*----- Detalle Modifica :										  -----*/        
/*---------------------------------------------------------------------*/        
/*----- Comentario : Se creo en base a SP_TXMVTO_CNTB_I04		  -----*/          
/*---------------------------------------------------------------------*/        
/*----- Drop proc SP_TXMVTO_CNTB_I49                             ----*/    
/*----- Grant all on SP_TXMVTO_CNTB_I49 to PUBLIC                ----*/    
/*----- SP_TXMVTO_CNTB_I49                                       ----*/    
/*-------------------------------------------------------------------*/    
    
@ISCO_EMPR TD_VC_002,    
@ISCO_USUA TD_VC_008,  
@IDFE_USUA TD_DT_001,  
@INNU_CNTB_EMPR TD_IN_001_CONT,    
@INNU_ANNO TD_IN_004_ANNO,    
@INNU_MESE TD_IN_002_MESE,    
@INNU_FACT TD_NU_016_004    
--      with encryption
as    
Begin Transaction SP_TXMVTO_CNTB_I49    
Declare     
@CSCO_UNID_CNTB TD_VC_003,    
@CSCO_OPRC_CNTB TD_VC_003,    
@VSCO_MONE_CNTB TD_VC_003,    
@CSNU_ASTO      TD_VC_010,    
@CNIM_DEBE TD_NU_016_004,     
@CNIM_HABE TD_NU_016_004,    
@VDFE_ASTO_CNTB TD_DT_001,    
@VNNU_SECU TD_IN_002,    
@VSID_GANA_REDO TD_VC_003,    
@VSID_PERD_REDO TD_VC_003,    
@VSCO_CNTA_GANA TD_VC_020_CNTA,    
@VSCO_CNTA_PERD TD_VC_020_CNTA,    
@VNTO_SALD TD_NU_016_004,    
@CDFE_DOCU_VENC TD_DT_001,    
@VNFA_CAMB_DIAR TD_NU_015_006,    
@CDFE_DOCU_REFE TD_DT_001,    
@CNNU_PROC TD_IN_001,    
@CNNU_PROC_SECU TD_IN_001,    
@VSST_CNTA_NATU TD_VC_003,    
@CSSI_MVTO_CNTB TD_VC_003,    
@VSST_AUXI_EMPR TD_VC_001,    
@VSTI_AUXI_REGA TD_VC_001,    
@VSCO_AUXI_REGA TD_VC_020,    
@VSTI_AUXI_REPE TD_VC_001,    
@VSCO_AUXI_REPE TD_VC_020,    
@VSST_ORDE_SERV TD_VC_001,    
@VSCO_ORDE_REGA TD_VC_020,   
@VSCO_ORDE_REPE TD_VC_020    
    
/* Selecciona lAs cuenta de Ganacia y Perdida */    
    
--- Inicializar-------------    
  Select @VSTI_AUXI_REGA = Null    
  Select @VSCO_AUXI_REGA = Null    
  Select @VSTI_AUXI_REPE = Null    
  Select @VSCO_AUXI_REPE = Null    
    
Select  @VSCO_MONE_CNTB = CO_MONE,    
 @VSID_GANA_REDO = ID_GANA_REDO,    
 @VSID_PERD_REDO = ID_PERD_REDO     
From TTCNTB_EMPR    
Where CO_EMPR = @ISCO_EMPR and    
NU_CNTB_EMPR = @INNU_CNTB_EMPR    
    
Select @VSST_AUXI_EMPR = 'N'    
Select @VSST_ORDE_SERV = 'N'    
    
Select @VSCO_CNTA_GANA = t1.CO_CNTA_EMPR,    
       @VSST_AUXI_EMPR = t2.ST_AUXI_EMPR,    
       @VSST_ORDE_SERV = t2.ST_ORDE_SERV
From TTIDEN_CNTA t1, TMPLAN_ANNO t2    
Where  t1.CO_EMPR = @ISCO_EMPR     
And     t1.NU_CNTB_EMPR = @INNU_CNTB_EMPR     
And     t1.ID_CNTA = @VSID_GANA_REDO    
And     t2.CO_EMPR = t1.CO_EMPR    
And     t2.CO_CNTA_EMPR = t1.CO_CNTA_EMPR    
    
If @VSST_AUXI_EMPR = 'S'    
Begin    
  Select @VSTI_AUXI_REGA = TI_AUXI_REGA,    
         @VSCO_AUXI_REGA = CO_AUXI_REGA    
  From   TMPARA_CONT   
  Where  CO_EMPR = @ISCO_EMPR     
End    

If @VSST_ORDE_SERV = 'S'    
Begin    
  Select @VSCO_ORDE_REGA = NullIf(Rtrim(CO_ORDE_REGA),'')
  From   TMPARA_CONT   
  Where  CO_EMPR = @ISCO_EMPR     
End    
    
Select @VSST_AUXI_EMPR = 'N'    
Select @VSST_ORDE_SERV = 'N'    
    
Select @VSCO_CNTA_PERD = t1.CO_CNTA_EMPR,    
       @VSST_AUXI_EMPR = t2.ST_AUXI_EMPR,    
       @VSST_ORDE_SERV = t2.ST_ORDE_SERV    
From TTIDEN_CNTA t1, TMPLAN_ANNO t2    
Where  t1.CO_EMPR = @ISCO_EMPR     
And     t1.NU_CNTB_EMPR = @INNU_CNTB_EMPR     
And     t1.ID_CNTA = @VSID_PERD_REDO    
And     t2.CO_EMPR = t1.CO_EMPR    
And     t2.CO_CNTA_EMPR = t1.CO_CNTA_EMPR    
    
If @VSST_AUXI_EMPR = 'S'    
Begin    
  Select @VSTI_AUXI_REPE = TI_AUXI_REPE,    
         @VSCO_AUXI_REPE = CO_AUXI_REPE    
  From   TMPARA_CONT    
  Where  CO_EMPR = @ISCO_EMPR     
End 

If @VSST_ORDE_SERV = 'S'    
Begin    
  Select @VSCO_ORDE_REPE = NullIf(Rtrim(CO_ORDE_REPE),'')
  From   TMPARA_CONT   
  Where  CO_EMPR = @ISCO_EMPR     
End       
    
Declare CU_TXMVTO_CNTB_I49_1 Cursor    
For    
Select t1.CO_UNID_CNTB, t1.CO_OPRC_CNTB, t1.NU_ASTO,     
 DEBE  = Isnull(SUM( ROUND(((ASCII(t1.TI_OPER)/67)*Isnull(t1.IM_MVTO_CNTB, 0)),2) ), 0),    
 HABER = Isnull(SUM( ROUND(((65/ASCII(t1.TI_OPER))*Isnull(t1.IM_MVTO_CNTB, 0)),2) ), 0),     
       MAX(t1.SI_MVTO_CNTB), Max(t1.NU_PROC), Max(t1.NU_PROC_SECU)    
From   TXMVTO_CNTB t1, TMOPRC_CNTB t2    
Where  t1.CO_EMPR = @ISCO_EMPR      
And      t1.NU_CNTB_EMPR = @INNU_CNTB_EMPR    
And      t1.NU_ANNO = @INNU_ANNO      
And      t1.NU_MESE = @INNU_MESE      
And      t1.SI_MVTO_CNTB in ( 'APR', 'DIG' )    
And      t1.CO_EMPR = t2.CO_EMPR     
And      t1.CO_OPRC_CNTB = t2.CO_OPRC_CNTB     
And      t2.TI_SITU != 'DES'     
Group By t1.CO_UNID_CNTB, t1.CO_OPRC_CNTB, t1.NU_ASTO    
Order By t1.CO_UNID_CNTB, t1.CO_OPRC_CNTB, t1.NU_ASTO    
Open CU_TXMVTO_CNTB_I49_1    
Fetch CU_TXMVTO_CNTB_I49_1 Into @CSCO_UNID_CNTB, @CSCO_OPRC_CNTB, @CSNU_ASTO, @CNIM_DEBE,    
             @CNIM_HABE, @CSSI_MVTO_CNTB, @CNNU_PROC, @CNNU_PROC_SECU    
While @@Fetch_status = 0    
Begin    
Select @VNTO_SALD = @CNIM_DEBE - @CNIM_HABE    
If ( ABS(ROUND(@VNTO_SALD,2)) <= @INNU_FACT And ABS(ROUND(@VNTO_SALD,2)) > 0.00 )    
Begin    
Select  @VDFE_ASTO_CNTB = MAX(FE_ASTO_CNTB), @VNNU_SECU  = MAX(NU_SECU) + 1    
From TXMVTO_CNTB     
Where     
CO_EMPR  = @ISCO_EMPR  And    
NU_CNTB_EMPR  = @INNU_CNTB_EMPR And    
CO_UNID_CNTB  = @CSCO_UNID_CNTB And    
CO_OPRC_CNTB  = @CSCO_OPRC_CNTB And    
NU_ANNO  = @INNU_ANNO  And    
NU_MESE  = @INNU_MESE  And    
NU_ASTO  = @CSNU_ASTO    
    
/*-------------- CASO 1 GANANCIA - ---------------*/    
If ROUND(@VNTO_SALD,2) > 0.00    
Begin    
 Select @VSST_CNTA_NATU = ST_CNTA_NATU    
    from TMPLAN_EMPR    
  where CO_EMPR = @ISCO_EMPR     
   and CO_CNTA_EMPR = @VSCO_CNTA_GANA    
   And NU_ANNO = 9999    
    
 if @VSST_CNTA_NATU = 'COM'    
   Select @VNFA_CAMB_DIAR = FA_CMPR_OFIC    
     from TCFACT_CAMB    
    where CO_MONE != @VSCO_MONE_CNTB     
     and FE_CAMB = @VDFE_ASTO_CNTB    
 Else    
  Select @VNFA_CAMB_DIAR = FA_VNTA_OFIC    
     from TCFACT_CAMB    
    where CO_MONE != @VSCO_MONE_CNTB     
     and FE_CAMB = @VDFE_ASTO_CNTB    
      
 if @VNFA_CAMB_DIAR IS NULL     
  Select @VNFA_CAMB_DIAR = 1.000000    
Insert Into TXMVTO_CNTB    
(CO_EMPR, NU_CNTB_EMPR, CO_UNID_CNTB, CO_OPRC_CNTB,    
 NU_ANNO, NU_MESE, NU_ASTO, NU_SECU, FE_ASTO_CNTB,    
 CO_CNTA_EMPR, TI_AUXI_EMPR, CO_AUXI_EMPR, TI_DOCU,    
 NU_DOCU, FE_DOCU, TI_CAMB, CO_MONE, FA_CAMB, TI_OPER, IM_MVTO_ORIG,     
 IM_MVTO_CNTB, DE_GLOS, SI_MVTO_CNTB, FE_DOCU_VENC, FA_CAMB_DIAR,     
 FE_DOCU_REFE, NU_PROC, NU_PROC_SECU, ST_GEST, ST_REDO, CO_ORDE_SERV,
 CO_USUA_MODI, FE_USUA_MODI, CO_USUA_CREA, FE_USUA_CREA )    
Values ( @ISCO_EMPR, @INNU_CNTB_EMPR, @CSCO_UNID_CNTB, @CSCO_OPRC_CNTB, @INNU_ANNO, @INNU_MESE,     
 @CSNU_ASTO, @VNNU_SECU, @VDFE_ASTO_CNTB, @VSCO_CNTA_GANA, @VSTI_AUXI_REGA, @VSCO_AUXI_REGA,    
 NULL, NULL, NULL, 'PAC', @VSCO_MONE_CNTB, 1.000000, 'ABO', 0.00, ABS(@VNTO_SALD),    
 'AJUSTE POR REDONDEO', @CSSI_MVTO_CNTB, NULL, @VNFA_CAMB_DIAR, NULL, @CNNU_PROC, 
 @CNNU_PROC_SECU, 'N', 'S',NullIf(Rtrim(@VSCO_ORDE_REGA),''),
 @ISCO_USUA , @IDFE_USUA, @ISCO_USUA,@IDFE_USUA)    
    
If @@ERROR != 0    
Begin     
Close CU_TXMVTO_CNTB_I49_1    
Deallocate CU_TXMVTO_CNTB_I49_1    
Rollback Transaction SP_TXMVTO_CNTB_I49    
Return    
End    
End     
/*-------------- CASO 2 PERDIDA ---------------*/    
    
Else If ROUND(@VNTO_SALD,2) < 0.00    
Begin    
 Select @VSST_CNTA_NATU = ST_CNTA_NATU    
    from TMPLAN_EMPR    
  where CO_EMPR = @ISCO_EMPR     
   and CO_CNTA_EMPR = @VSCO_CNTA_PERD    
   And NU_ANNO = 9999    
    
--   And NU_ANNO = @INNU_ANNO    
 if @VSST_CNTA_NATU = 'COM'    
   Select @VNFA_CAMB_DIAR = FA_CMPR_OFIC    
     from TCFACT_CAMB    
    where CO_MONE != @VSCO_MONE_CNTB     
     and FE_CAMB = @VDFE_ASTO_CNTB    
 Else    
  Select @VNFA_CAMB_DIAR = FA_VNTA_OFIC    
     from TCFACT_CAMB    
    where CO_MONE != @VSCO_MONE_CNTB     
     and FE_CAMB = @VDFE_ASTO_CNTB    
      
 if @VNFA_CAMB_DIAR IS NULL     
  Select @VNFA_CAMB_DIAR = 1.000000    
Insert Into TXMVTO_CNTB(CO_EMPR, NU_CNTB_EMPR, CO_UNID_CNTB, CO_OPRC_CNTB,     
 NU_ANNO, NU_MESE, NU_ASTO, NU_SECU, FE_ASTO_CNTB,CO_CNTA_EMPR, TI_AUXI_EMPR,     
 CO_AUXI_EMPR, TI_DOCU,NU_DOCU, FE_DOCU, TI_CAMB, CO_MONE, FA_CAMB,     
 TI_OPER, IM_MVTO_ORIG, IM_MVTO_CNTB, DE_GLOS,    
 SI_MVTO_CNTB, FE_DOCU_VENC, FA_CAMB_DIAR, FE_DOCU_REFE, NU_PROC, NU_PROC_SECU, ST_GEST, ST_REDO,   
CO_ORDE_SERV,CO_USUA_MODI, FE_USUA_MODI, CO_USUA_CREA, FE_USUA_CREA)    
Values ( @ISCO_EMPR, @INNU_CNTB_EMPR, @CSCO_UNID_CNTB,     
 @CSCO_OPRC_CNTB, @INNU_ANNO, @INNU_MESE, @CSNU_ASTO, @VNNU_SECU,     
 @VDFE_ASTO_CNTB, @VSCO_CNTA_PERD, @VSTI_AUXI_REPE, @VSCO_AUXI_REPE, NULL, NULL,    
 NULL, 'PAC', @VSCO_MONE_CNTB, 1.000000, 'CAR', 0.00, ABS(@VNTO_SALD),'AJUSTE POR REDONDEO',     
 @CSSI_MVTO_CNTB, NULL, @VNFA_CAMB_DIAR, NULL, @CNNU_PROC, @CNNU_PROC_SECU, 'N', 'S',   
NullIf(Rtrim(@VSCO_ORDE_REPE),''),@ISCO_USUA , @IDFE_USUA, @ISCO_USUA,@IDFE_USUA)    
If @@ERROR != 0         
   Begin     
     Close CU_TXMVTO_CNTB_I49_1    
     Deallocate CU_TXMVTO_CNTB_I49_1     
     Rollback Transaction SP_TXMVTO_CNTB_I49    
     Return    
   End    
End    
End    
Fetch CU_TXMVTO_CNTB_I49_1 Into @CSCO_UNID_CNTB, @CSCO_OPRC_CNTB, @CSNU_ASTO, @CNIM_DEBE,    
             @CNIM_HABE, @CSSI_MVTO_CNTB, @CNNU_PROC, @CNNU_PROC_SECU    
End    
Close CU_TXMVTO_CNTB_I49_1    
Deallocate CU_TXMVTO_CNTB_I49_1     
Commit Transaction SP_TXMVTO_CNTB_I49    
Return    
/*----------------------------------- Fin -------------------------------------*/



GO
